iT邦幫忙

DAY 15
0

Ruby on Rails 實戰聖經 - 初心者的30天學習記錄系列 第 15

Ruby on Rails實戰聖經 (15) - ActiveRecord 續

  • 分享至 

  • xImage
  •  

如何查詢
一樣我們可以用主控台來練習:
first、last、all
這三個方法可以分別找出第一筆、最後一筆、以及全部的資料,要注意的是如果資料量較大,不要使用all,會浪費非常多的記憶體,儘量使用分頁或使用limit方法限制搜尋筆數。

g1 = Guest.first
g2 = Guest.last
g = Guest.all #g會是一個陣列
g[0] == g1 #true

find
如果知道資料的主鍵值(ID),就可以用find找出那筆資料

g3 = Guest.find(3)

find也可以接受陣列
下面兩種寫法都可以:

array = Guest.find([5,7])
array = Guest.find(5,7)

limit
可以使用limit方法限制搜尋筆數

arr = Guest.limit(5).all
arr.size #5

where
where方法可以組合出非常彈性的SQL查詢
Hash寫法

p1 = Person.where(:name => 'Bikon', :age => '25')

陣列寫法

p2 = Person.where(["name = ? or age = ?", 'Bikon', 25])

陣列寫法可以用來做or的查詢,hash則無法。

*注意別用字串寫法,以避免SQL injection
//別用以下寫法
p2 = Person.where("name = #{params[:name]}")

order
order顧名思義可以用來設定排序

g1 = Guest.order("ID DESC") #降冪排序
g2 = Guest.order("ID ASC") #升冪排序

也可以混用

p3 = Person.order("age DESC, height ASC")

如果要取消order條件可以用reorder

p3 = Person.order("age DESC").reorder("name") #改用name排序
p3 = Person.order("age DESC").reorder(nil) #取消所有排序

offset
offset可以設定忽略前幾筆不取出,通常用於資料分頁:

g = Guest.limit(5).offset(2)

這樣就不會抓出前兩筆

select
預設的SQL會抓出資料的所有欄位,而select可以用來設定只抓出資料的特定欄位。

g = Guest.select(:id, :title)
g = Guest.select("id, title")

readonly
使用readonly找出來的資料就無法修改或刪除

g = Guest.readonly.first
g.destroy #丟出ActiveRecord::ReadOnlyRecord: ActiveRecord::ReadOnlyRecord 例外

上一篇
Ruby on Rails實戰聖經 (14) - ActiveRecord
下一篇
Ruby on Rails實戰聖經 (16) - ActiveRecord III
系列文
Ruby on Rails 實戰聖經 - 初心者的30天學習記錄30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言